#include<stdio.h>
#include <unistd.h>
#include <stdlib.h>

#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>

#define FIFO_NAME "/home/china/2515F"
#define FIFO_NAME2 "/home/china/2515F2"

int main()
{
    //system("rm  /home/china/2515F");  remove
    // 创建一个管道文件
    int ret = mkfifo(FIFO_NAME, 0664);
    if (ret == -1 && errno != EEXIST) // 不是因为文件存在而报错
    {
        perror("mkfifo failed");
        return -1;
    }
    ret = mkfifo(FIFO_NAME2, 0664);
    if (ret == -1 && errno != EEXIST) // 不是因为文件存在而报错
    {
        perror("mkfifo failed");
        return -1;
    }

    int pid = fork();
    if(pid > 0)
    {
        //打开管道文件
        int fd;
        if( ( fd = open(FIFO_NAME,O_RDONLY ) ) == -1 )
        {
            perror("open fifo failed");
            return -1;
        }
        printf("open success!\n");

        //读取管道文件中的数据
        int i = 5;
        while(1)
        {
            char buf[256] = {0};
            int len = read(fd,buf,256);
            if (len == 0)
            {
                break;
            }
            printf("len = %d,data = %s\n",len,buf);
        }

        system("kill -9  pid");

        //关闭管道
        close(fd);
    }else if(pid == 0)
    {
        // 打开管道文件
        int fd;
        if ((fd = open(FIFO_NAME2, O_WRONLY)) == -1)
        {
            perror("open fifo failed");
            return -1;
        }
        printf("write open success!\n");
        // 读取管道文件中的数据

        while (1)
        {
            char buf[256] = {0};
            scanf("%s",buf);
            write(fd,buf,strlen(buf));
        }

        // 关闭管道
        close(fd);
    }
    return 0;
}